package com.dkm.orproject.dkmoa.service;

import com.dkm.orproject.dkmoa.domain.OaJurisdiction;
import com.dkm.orproject.dkmoa.domain.OaPersonnel;
import com.dkm.orproject.dkmoa.domain.vo.OaAdressBookVo;
import com.dkm.orproject.utils.utils.ThreeVo;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

import java.util.List;

/**
 *  @ClassName : OaPersonnelService  //类名
 *  @Description : OaPersonnel 的service 层  //描述
 *  @Author : 石智诚  //作者
 *  @Date: 2020-07-30 09:08  //时间
 */
public interface OaPersonnelService {
    /**
     * 总行数
     * @param personnel 人员模型 用于条件查询
     * @param startTime 开始时间
     * @param endTime 结束
     * @return 总行数
     */
    Long rowCount(OaPersonnel personnel, String startTime, String endTime);

    /**
     * 用户登录
     * @param oaPersonnel 账号和密码
     * @return 用户的信息
     */
    OaPersonnel isLogin(OaPersonnel oaPersonnel);

    /**
     * 增加用户
     * @param record 用户信息
     * @return 是否增加成功
     */
    int insertSelective(OaPersonnel record);

    /**
     * 根据id查询用户信息
     * @param pkPersonnelId 用户Id
     * @return 特定的用户信息
     */
    OaPersonnel selectByPrimaryKey(Long pkPersonnelId);

    /**
     * 更新用户的信息
     * @param record 用户的信息
     * @return 是否更新成功
     */
    int updateByPrimaryKeySelective(OaPersonnel record);

    /**
     * 逻辑删除
     * @param pkPersonnelId 要删除的用户ID
     * @param personnelName 更新人名字
     * @return 删除的数据量
     */
    int updateById(Long pkPersonnelId,String personnelName);

    /**
     * 删除
     * @param pkPersonnelId 用户ID
     * @return 是否删除成功
     */
    int deleteByPrimaryKey(Long pkPersonnelId);

    /**
     * 查询所有数据并进行分页
     * @param oaPersonnel 用户信息
     * @param page 页数
     * @param limit 返回最大的记录行数目
     * @param startTime 开始时间
     * @param endTime 结束的时间
     * @return 分页的数据
     */
    List<OaPersonnel> findAll(OaPersonnel oaPersonnel, Integer page, Integer limit , String startTime, String endTime);

    /**
     * 批量逻辑删除
     * @param list 人员id的集合
     * @return 删除的行数
     */
    int updateAll(List<Long> list,String personnelName);
    /**
     * 批量物理删除
     * @param list 人员id的集合
     * @return 删除的行数
     */
    int deleteAll(List<Long> list);

    List<OaPersonnel> findByAll();

    int findByAccount(OaPersonnel personnel);
    /**
     * 人员信息查看功能
     * @param pkPersonnelId
     * @return
     */
    OaPersonnel selectByPersonId(Long pkPersonnelId);

    /**
     * 根据部门Id查看人员
     * @param organizationId
     * @param pkPersonnelId
     * @return
     */
    List<OaPersonnel> selectByDertment(Long organizationId, Long pkPersonnelId);

    List<OaJurisdiction> selectByOj(Long pkPersonnelId);

    /**
     * 树形
     * @return
     */
    List<ThreeVo> treePersons(Long flowId);

    /**
     * 入职流程人员
     * @param flowId
     * @param wordKey
     * @return
     */
    List<ThreeVo>  findTreeEntryCheckPersons(Long flowId, String wordKey);

    /**
     * 导出
     * @return 集合
     */
    List<OaPersonnel> export();

    List<OaAdressBookVo> addressBook() throws BadHanyuPinyinOutputFormatCombination;

    /**
     * 查询所有人员，部门，岗位，公司
     * @return
     */
    List<ThreeVo> selectAll();
}
